package VWorldGameStudio;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

/**
 * 通讯方法类
 */
public class FCSocket {
	private Random ran = new Random();
	// 服务器
	private ServerSocket server;
	// 发消息
	private Socket messge;
	// 接收消息
//	private Socket receivemessge;
	// 端口号
	private int port = 5000;
	// ip地址
	private String ip;
	// 创建服务器尝试次数
	private int num = 0;
	private BufferedReader re;
	private PrintWriter wr;

	/*
	 * 由于玩家1的消息需要时刻发送给玩家2，故利用线程与sendmessge给玩家2发送消息
	 * 而玩家2也需要时刻发送信息给玩家一，故在玩家2这里创建发送信息的服务器，利用线程与sendmessge给玩家1发送
	 * 因为一个socket只能同时间下实现发送消息和接受消息的其中一个，所以利用两个socket，一个负责发送，一个负责接受，不会出现发送后等待接收挂起，
	 * 造成信息堵塞，无法同步
	 */
	// playerA创建连接,先执行createServer()
//	public String plyareraCreateConnect() {
//		try {
//		String[] str=waitClientConnect().split("/");
//		if(str[0].indexOf("客户端连接成功")>0) {
//			receivemessge=new Socket(str[1], Integer.valueOf(str[2]));
//			return "系统:连接玩家2成功!";
//		}else return "系统:连接玩家2失败!";
//		}catch (Exception e) {
//			return "系统:连接玩家2失败!";
//		}
//	}

	/**
	 * 创建服务器连接
	 * 
	 * @return
	 */
	public String createServer() {
		num++;
		try {
			this.ip = InetAddress.getLocalHost().getHostAddress();
			server = new ServerSocket(port);
			return "系统:服务器创建成功!\nIP:" + ip + " 端口:" + port;
		} catch (Exception e) {
			port = ran.nextInt(5000) + port;
			return (num > 10) ? "系统:服务器创建失败!" : createServer();
		}
	}

	/**
	 * 等候客户端连接
	 * 
	 * @return
	 */
	public String waitClientConnect() {
		try {
			messge = server.accept();
//			re=new BufferedReader(new InputStreamReader(messge.getInputStream()));
//			String rt=re.readLine();
//			re.close();
//			return "系统:客户端连接成功!"+"/"+rt;
			return "系统:客户端连接成功!";
		} catch (Exception e) {
			return "系统:客户端连接失败!";
		}
	}

	// 等候服务器连接
//	private String waitServerconnect() {
//		try {
//			sendmessge=server.accept();
//			return "系统:服务器连接成功!";
//		}catch (Exception e) {
//			return "系统:服务器连接失败b!";
//		}
//	}
//	//客户端连接服务器
//	public String connectServer(String ip,int port) {
//		try {
//			receivemessge=new Socket(ip, port);
//			wr=new PrintWriter(receivemessge.getOutputStream());
//			this.port=port+1;
//			if(createServer().indexOf("服务器创建成功")>0)
//				wr.println(this.ip+"/"+this.port);
//			else
//				wr.println("error");
//			wr.close();
//			return waitServerconnect();
//		}catch (Exception e) {
//			return "系统:连接服务器失败a!";
//		}
//	}

	/**
	 * 连接服务
	 * 
	 * @param ip
	 * @param port
	 * @return
	 */
	public String connectServer(String ip, int port) {
		try {
			messge = new Socket(ip, port);
			return "系统:服务器连接成功!";
		} catch (Exception e) {
			return "系统:连接服务器失败!";
		}
	}

	/**
	 * 发送消息
	 * 
	 * @param messge
	 * @return
	 */
	public String sendMessge(String messge) {
		try {
			wr = new PrintWriter(this.messge.getOutputStream());
			wr.write(messge + "\n");
			wr.flush();
			return messge;
		} catch (Exception e) {
			return null;
		}
	}

	/**
	 * 接受消息
	 * 
	 * @return
	 */
	public String receiveMessge() {
		try {
			re = new BufferedReader(new InputStreamReader(messge.getInputStream()));
			return re.readLine();
		} catch (Exception e) {
			return null;
		}
	}

	/**
	 * 关闭连接
	 * 
	 * @param num
	 */
	public void closeConnect(int num) {
		try {
			sendMessge("closeconnect");
			messge.close();
//			sendmessge.close();
			if (num == 2)
				server.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
